package com.zy.explore.db.infrastructure.plugins.multidbsupport.sqlchange.function;

import java.util.ArrayList;
import java.util.List;

/**
 * 神通数据库
 *
 * @author xiayd
 */
public class DMFunChangeFactory extends AbstractFunChangeFactory {

    public DMFunChangeFactory() {
        //兼容oracle:添加oracle中的转换方法
        AbstractFunChangeFactory funChangeFactory = new MysqlToOracleFunChangeFactory();
        this.addAll(funChangeFactory.getAll());
        //忽略concat函数
        map.remove("concat");

        init();
    }

    private void init() {
        //TRUNC(NUMBER)表示截断数字，TRUNC(date)表示截断日期
        add("trunc", fun -> merge("trunc", fun.getArgList()));
        add("days", fun -> merge("day", fun.getArgList()));
//		add("group_concat",fun->{//神通数据库只支持一个参数，并且不支持分割符号
//			String arg0 = fun.getArgList().get(0);
//			
//			int idx = arg0.indexOf(" separator ");
//			if(idx > -1){
//				fun.getArgList().set(0, arg0.substring(0,idx));
//			}
//			
//			return merge("group_concat",fun.getArgList());
//		});
        //返回两个日期之间的天数
        add("datediff", fun -> {
            List<String> argList = new ArrayList<>();
            // field名称 对应的数字 对应的名称
            // 微秒 0 millisecond、ms
            // 秒 1 second、ss、s
            // 分 2 minute、mi、n
            // 小时 3 hour、hh
            // 天 4 day、dd、d
            // 星期 5 week、wk、ww
            // 月 6 month、mm、m
            // 季度 7 quarter、qq
            // 年 8 year、yy、yyyy
            // 天
            argList.add("DAY");
            argList.addAll(fun.getArgList());
            return merge("datediff", argList);
        });

    }

}
